iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Mobile Development

IOS的打怪升級之路系列 第 19

鐵人賽第十九天 留言板(五)tableview的右滑功能

  • 分享至 

  • xImage
  •  

說明

這一篇我們將實作 UITableView 的右滑刪除功能,並結合 Realm 資料庫來刪除相應的資料,讓資料庫內容與 UI 同步更新。這個功能可以提升使用者體驗,讓資料操作變得更加直覺與方便。/images/emoticon/emoticon12.gif

實作

UITableView 中,我們可以透過實作 trailingSwipeActionsConfigurationForRowAt 方法,來定義當使用者向左滑動一列時顯示的動作按鈕,這裡我們實作了「移除」操作。

右滑刪除功能程式碼:

func tableView(_ tableView: UITableView,
                   trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

        // 創建一個 "移除" 操作
        let removeAction = UIContextualAction(style: .normal, title: "移除") { (_, _, completionHandler) in

            // 使用 Realm 刪除數據
            let realm = try! Realm()
            let todos = realm.objects(dog.self)
            let dd = todos[indexPath.row] // 根據行數取得對應的資料
            try! realm.write {
                realm.delete(dd) // 刪除資料庫中的該項資料
            }

            // 從 tableView 中刪除行並添加刪除動畫
            tableView.deleteRows(at: [indexPath], with: .automatic)
            
            // 告知系統操作已完成
            completionHandler(true)
        }

        // 設定 "移除" 操作的背景顏色
        removeAction.backgroundColor = UIColor.red

        // 返回定義好的 swipe actions 配置
        return UISwipeActionsConfiguration(actions: [removeAction])
    }
重要步驟
  1. 創建刪除操作:
    我們使用 UIContextualAction 來創建一個 "移除" 操作。當使用者點擊這個操作時,會觸發一段程式碼來刪除對應的數據。

  2. 操作 Realm 資料庫:
    我們先取得 dog 類別的資料,然後透過索引取得指定行的資料。接著,進入 Realm 的 write 區塊中刪除該資料。

  3. 刪除動畫:
    使用 tableView.deleteRows(at:with:) 方法,從 UI 中移除該行並帶有自動的動畫效果。

  4. 完成操作:
    刪除操作完成後,必須呼叫 completionHandler(true) 來告知系統該操作已成功,這樣滑動的按鈕才能正常隱藏。

結語

這段程式碼實作了右滑刪除功能,並將 UI 操作與 Realm 資料庫同步更新。這樣不僅可以提升使用者體驗,也確保資料的即時性。/images/emoticon/emoticon07.gif


上一篇
鐵人賽第十八天 留言板(四) tableview設定
下一篇
鐵人賽第二十天 留言板(六)tableview的左滑功能(編輯)
系列文
IOS的打怪升級之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言